package com.itany.corejava.code09_集合.set集合;

import java.util.*;

/**
 * @author 石小俊
 * @date 2023年05月06日 10:50
 */
public class Test01_HashSet {

    public static void main(String[] args) {
//        setMethod();
        eachSet();
    }

    public static void definedSet() {
        // 定义方式一:使用默认初始容量16与默认加载因子0.75
        HashSet<String> set = new HashSet<>();
        set.add("admin");
        set.add("alice");
        System.out.println(set);

        // 定义方式二:将另一个Collection转换成HashSet
        List<Integer> list = Arrays.asList(1, 4, 6, 8, 4, 6, 10);
        System.out.println(list);

        // 将List转换成Set时需要注意
        // 由于List可重复,Set元素不可重复
        // 因此,转换后会自动去重,即自动将重复的元素清除掉
        HashSet<Integer> set2 = new HashSet<>(list);
        System.out.println(set2);

        // 定义方式三:使用自定义初始容量与默认加载因子
        HashSet<Integer> set3 = new HashSet<>(10);

        // 定义方式四:使用自定义初始容量与自定义加载因子的方式进行创建
        // 加载因子是一个float类型的数值
        HashSet<String> set4 = new HashSet<>(10, 0.5F);
    }

    public static void setMethod() {
        HashSet<Integer> set = new HashSet<>();
        System.out.println("集合是否为空:" + set.isEmpty());
        System.out.println(set.size() == 0);
        set.add(1);
        set.add(3);
        set.add(4);
        System.out.println("集合是否为空:" + set.isEmpty());
        System.out.println("集合中元素的数量:" + set.size());

        System.out.println(set.remove(1));
        System.out.println(set.remove("aaa"));

        System.out.println("集合中是否包含3:" + set.contains(3));

        System.out.println("清空前:" + set);
        // 清空元素
        set.clear();

        System.out.println("清空后:" + set);
    }

    public static void eachSet() {
        Set<Integer> set = new HashSet<>();
        set.add(1);
        set.add(3);
        set.add(11);
        set.add(15);
        set.add(8);

        // 由于set没有索引,因此不支持普通for循环
        // 方式一:使用增强for循环进行遍历
        for (Integer num : set) {
            System.out.print(num + "\t");
        }
        System.out.println();

        // 方式二:使用Iterator迭代器
        Iterator<Integer> it = set.iterator();
        while (it.hasNext()) {
            System.out.print(it.next() + "\t");
        }
    }

}
